package com.luo.gmall.pms.controller;

import java.util.List;
import java.util.Map;

import com.luo.gmall.pms.vo.SaleAttrValueVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.luo.gmall.pms.entity.SkuAttrValueEntity;
import com.luo.gmall.pms.service.SkuAttrValueService;
import com.luo.gmall.common.bean.PageResultVo;
import com.luo.gmall.common.bean.ResponseVo;
import com.luo.gmall.common.bean.PageParamVo;

/**
 * sku销售属性&值
 *
 * @author zoro
 * @email 1160848022@qq.com
 * @date 2021-11-01 19:22:15
 */
@Api(tags = "sku销售属性&值 管理")
@RestController
@RequestMapping("pms/skuattrvalue")
public class SkuAttrValueController {

    @Autowired
    private SkuAttrValueService skuAttrValueService;


    /**
     * 10.根据spuId查询spu下所有销售属性组合与skuId的映射关系
     */
    @GetMapping("salesCombo/{spuId}")
    public ResponseVo<String> querySpuAllSalesComboMapSkuIdBySpuId(@PathVariable Long spuId) {
        String skuJsons = skuAttrValueService.querySpuAllSalesComboMapSkuIdBySpuId(spuId);
        return ResponseVo.ok(skuJsons);
    }

    /**
     * 9.根据skuId查询当前sku的销售属性
     */
    @GetMapping("currentSaleAttrValues/{skuId}")
    public ResponseVo<List<SkuAttrValueEntity>> queryCurrentSaleAttrValuesBySkuId(@PathVariable Long skuId) {
        List<SkuAttrValueEntity> saleAttr = skuAttrValueService.queryCurrentSaleAttrValuesBySkuId(skuId);
        return ResponseVo.ok(saleAttr);
    }


    /**
     * 8.根据spuId查询spu下所有sku的销售属性  saleAttrs  V
     */
    @GetMapping("saleAttrs/{spuId}")
    public ResponseVo<List<SaleAttrValueVo>> querySaleAttrValueVosBySpuId(@PathVariable Long spuId) {
        List<SaleAttrValueVo> saleAttrValueVos = skuAttrValueService.querySaleAttrValueVosBySpuId(spuId);
        return ResponseVo.ok(saleAttrValueVos);
    }


    /**
     * 根据 分组id和skuId查询 基本属性列表
     *
     * @param categoryId 分组id
     * @param skuId      skuId
     * @return 返回基本属性列表
     */
    @GetMapping("category/{categoryId}")
    public ResponseVo<List<SkuAttrValueEntity>> querySkuAttrValueListBySkuIdAndCategoryId(
            @PathVariable("categoryId") Long categoryId,
            @RequestParam("skuId") Long skuId) {
        List<SkuAttrValueEntity> skuAttrValueEntities = skuAttrValueService.querySkuAttrValueListBySkuIdAndCategoryId(categoryId, skuId);
        return ResponseVo.ok(skuAttrValueEntities);
    }

    /**
     * 列表
     */
    @GetMapping
    @ApiOperation("分页查询")
    public ResponseVo<PageResultVo> querySkuAttrValueByPage(PageParamVo paramVo) {
        PageResultVo pageResultVo = skuAttrValueService.queryPage(paramVo);

        return ResponseVo.ok(pageResultVo);
    }


    /**
     * 信息
     */
    @GetMapping("{id}")
    @ApiOperation("详情查询")
    public ResponseVo<SkuAttrValueEntity> querySkuAttrValueById(@PathVariable("id") Long id) {
        SkuAttrValueEntity skuAttrValue = skuAttrValueService.getById(id);

        return ResponseVo.ok(skuAttrValue);
    }

    /**
     * 保存
     */
    @PostMapping
    @ApiOperation("保存")
    public ResponseVo<Object> save(@RequestBody SkuAttrValueEntity skuAttrValue) {
        skuAttrValueService.save(skuAttrValue);

        return ResponseVo.ok();
    }

    /**
     * 修改
     */
    @PostMapping("/update")
    @ApiOperation("修改")
    public ResponseVo update(@RequestBody SkuAttrValueEntity skuAttrValue) {
        skuAttrValueService.updateById(skuAttrValue);

        return ResponseVo.ok();
    }

    /**
     * 删除
     */
    @PostMapping("/delete")
    @ApiOperation("删除")
    public ResponseVo delete(@RequestBody List<Long> ids) {
        skuAttrValueService.removeByIds(ids);

        return ResponseVo.ok();
    }

}
